#include <stdio.h>
#include <stdlib.h>
#include "types.h"

void echangerCx (Creneau* c1,Creneau* c2) {
  int aux;
  //Echange année //   test svn
  (aux)=(*c1).annee;
  (*c1).annee=(*c2).annee;
  (*c2).annee=(aux);
  //Echange mois
  aux=(*c1).mois;
  (*c1).mois=(*c2).mois;
  (*c2).mois=aux;
  //Echange jour
  aux=(*c1).jour;
  (*c1).jour=(*c2).jour;
  (*c2).jour=aux;
  //Echange heure
  aux=(*c1).heure;
  (*c1).heure=(*c2).heure;
  (*c2).heure=aux;
  //Echange min
  aux=(*c1).min;
  (*c1).min=(*c2).min;
  (*c2).min=aux;
}

void triCreneaux (Creneau cx[],int NbreCren) {
  //Tri par années (c'est toujours ça de fait !)
  int i=0,j,posmin;
  for (i;i<NbreCren;i++) {
    posmin=i;
    for (j=i;j<NbreCren;j++) {
      if (cx[posmin].annee>cx[j].annee)
	posmin=j;
    }
    echangerCx(&cx[posmin],&cx[i]);
  }
  
  //Tri par mois
  int Ad=0,As=0;
  while(As<NbreCren){
    while(cx[Ad].annee==cx[As].annee){As++;}//On cherche As, position de l'annee suivante
    int i=Ad,j,posmin;    //Tri entre Ad et As selon le mois
    for (Ad;Ad<As;Ad++) {
      posmin=Ad;
      for (j=Ad;j<As;j++) {
	if (cx[posmin].mois>cx[j].mois)
	  posmin=j;
      }
      echangerCx(&cx[posmin],&cx[Ad]);
    }
    Ad=As;
  }

  //Tri par jour
  Ad=0,As=0;
  int Md=0,Ms=0;
  while(Ms<NbreCren){
    while(cx[Ad].annee==cx[As].annee){As++;}//On cherche As, position de l'année suivante
    while(cx[Md].mois==cx[Ms].mois && Ms<=As){Ms++;}//On cherche Ms, position du mois suivant
    int i=Md,j,posmin;    //Tri entre Md et Ms selon le jour
    for (Md;Md<Ms;Md++) {
      posmin=Md;
      for (j=Md;j<Ms;j++) {
	if (cx[posmin].jour>cx[j].jour)
	  posmin=j;
      }
      echangerCx(&cx[posmin],&cx[Md]);
    }
    Ad=Md=Ms;
  }
  
  //Tri par heure
  Ad=0,As=0;Md=0;Ms=0;
  int Jd=0,Js=0;
  while(Js<NbreCren && As<NbreCren){
    while(cx[Ad].annee==cx[As].annee){As++;}//On cherche As, position de l'année suivante
    while(cx[Md].mois==cx[Ms].mois && Ms<=As){Ms++;}//On cherche Ms, position du mois suivant
    while(cx[Jd].jour==cx[Js].jour){Js++;}//On cherche Js, position du jour suivant
    int i=Jd,j,posmin;    //Tri entre Jd et Js selon l'heure
    for (Jd;Jd<Js;Jd++) {
      posmin=Jd;
      for (j=Jd;j<Js;j++) {
	if (cx[posmin].heure>cx[j].heure)
	  posmin=j;
      }
      echangerCx(&cx[posmin],&cx[Jd]);
    }
    Ad=Md=Jd=Js;
  }
  
  //Tri par minute
  Ad=0,As=0;Md=0;Ms=0;Jd=0,Js=0;
  int Hd=0,Hs=0;
  while(Js<NbreCren && As<NbreCren){
    while(cx[Ad].annee==cx[As].annee){As++;}//On cherche As, position de l'année suivante
    while(cx[Md].mois==cx[Ms].mois && Ms<=As){Ms++;}//On cherche Ms, position du mois suivant
    while(cx[Jd].jour==cx[Js].jour){Js++;}//On cherche Js, position du jour suivant
    while(cx[Hd].heure==cx[Hs].heure){Hs++;}//On cherche Hs, position de l'heure suivante
    int i=Hd,j,posmin;    //Tri entre Hd et Hs selon les minutes
    for (Hd;Hd<Hs;Hd++) {
      posmin=Hd;
      for (j=Hd;j<Hs;j++) {
	if (cx[posmin].min>cx[j].min)
	  posmin=j;
      }
      echangerCx(&cx[posmin],&cx[Hd]);
    }
    Ad=Md=Jd=Hd=Hs;
  }
}
